package com.mjf.scala.chapter06

/**
 * 类和特质
 *  >如果不存在继承关系，混入多个特质。第一个特质使用extends连接，其余的使用with
 *  >如果存在继承关系，同时混入多个特质。先使用extends继承父类，在使用with连接特质
 *  >在创建对象的时候，单独混入某个特质
 */
object Scala18_TestTrait {
  def main(args: Array[String]): Unit = {

    val c1: MyClass18 = new MyClass18()
    c1.run()
    c1.speak()

    println("--------------------------------")

    // 在创建对象的时候，单独混入某个特质
    val c2: MyClass18 with TraitC = new MyClass18() with TraitC{
      override def buy(): Unit = println("lucy buy")
    }
    c2.run()
    c2.speak()
    c2.buy()


  }
}

trait TraitA {
  def run() : Unit
}

trait TraitB {
  def speak() : Unit
}

trait TraitC {
  def buy() : Unit
}

class Super18 { }

// 如果不存在继承关系，混入多个特质
// 第一个特质使用extends连接，其余的使用with
//class MyClass18 extends TraitA with TraitB { }

// 如果存在继承关系，同时混入多个特质
// 先使用extends继承父类，在使用with连接特质
class MyClass18 extends Super18 with TraitA with TraitB {
  override def run(): Unit = println("lucy run")

  override def speak(): Unit = println("lucy speak")
}